Promise.then 方法的返回值问题
第一种情况,返回一个 Promise
var p1 = Promise.resolve(42)
p1.then(value => {
return new Promise(function (resolve, rejected) {
resolve(value + 1)
})
}).then(value => {
console.log(value)
})
//43
//第一种情况,新建promise的resolve传出的值将作为then方法返回的promise的resolve的值传递出,console将打印出43
第二种情况,返回一个值
var p1 = Promise.resolve(42)
p1.then(value => {
return value + 2
}).then(value => {
console.log(value)
})
//44
//第二种情况,return的值将作为then方法返回的promise的resolve的值传递出,console将打印出44
第三种情况,新建一个 promise,使用 reslove 返回值
var p1 = Promise.resolve(42)
p1.then(value => {
const p2 = new Promise(function (resolve, rejected) {
resolve(value + 3)
})
}).then(value => {
console.log(value)
})
//undifined
//第三种情况,虽然新建了promise,但对于then方法来说,没有向return 的promise传递返回值,console将打印出undifined
第四种情况,新建一个 promise,使用 return 返回值
var p1 = Promise.resolve(42)
p1.then(value => {
const p2 = new Promise(function (resolve, rejected) {
return value + 4
})
}).then(value => {
console.log(value)
})
//undifined
//第四种情况,虽然新建了promise,但对于then方法来说,没有向它返回的promise传递返回值,console将打印出undifined
第五种情况,没有返回值
var p1 = Promise.resolve(42)
p1.then(value => {
return undefined
}).then(value => {
console.log(value)
})
//undifined
//then方法没有返回值,then方法的promise的resolve的值将传递出undifined。
以上三、四、五种情况,其实都是一样的问题,构造 then 方法的函数没有向 then 方法返回的 promise 对象的 resolve 方法传递值。因此 resolve 返回的都是 undfined
进阶,返回的 promise 自带 then 方法
var p1 = Promise.resolve(42)
p1.then(value => {
//返回的promise自带then方法
return new Promise(function (resolve, rejected) {
setTimeout(function () {
resolve(value + 1)
}, 3000)
}).then(value => {
return value + 1
})
}).then(value => {
console.log(value)
})
//44